package cuiyt.algorithm.dfs;

import algorithm.TreeNode;

/**
 * @author cyt
 * @create 2020-08-25 11:00
 */
public class T101 {
    public static void main(String[] args) {

    }

    /**
     * 给定一个二叉树，检查它是否是镜像对称的。
     *
     * 编写递归的时候， 首先先西思考出来当前问题是怎能解决的 即要找到递归的出口， 比如一个二叉树什么情况下才是
     *
     * 一个对称的： 1、 根节点是空 2、左右子树是对称的。 找到这个之后也就找到了要一直递归重复做的事情，编写递归即可。
     *
     * @param root
     * @return
     */
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        return dfs(root.left, root.right);
    }

    public boolean dfs(TreeNode l, TreeNode r) {
        if (l == null && r == null) {
            return true;
        }
        if (l != null && r != null) {
            return r.val == l.val && dfs(l.left, r.right) && dfs(l.right, r.left);
        }
        return false;
    }
}
